<?php

namespace addons\exam\model;


use addons\exam\enum\PaperUses;
use addons\exam\enum\PayAttachType;
use think\Db;
use app\common\services\UrlService;

class PaperModel extends \app\admin\model\exam\PaperModel
{
    // 追加属性
    protected $type
        = [
            'configs' => 'array'
        ];
    // public function getConfigsAttr($value, $data)
    // {
    //     $value = $value ? $value : (isset($data['configs']) ? $data['configs'] : '');
    //     return $value ? json_decode($value, true) : [];
    // }

    /**
     * 解析音频
     *
     * @param [type] $value
     * @return void
     */
    public function getDescAudioAttr($value)
    {
        if (!$value) {
            return '';
        }
        
        $value = urlService::getFileUrl($value);
        return $value;
    }


    /**
     * 获取试卷参与人员
     * @param $paper_id
     * @param $slice
     * @return array
     */
    public static function getJoinUsers($paper_id, $slice = 0)
    {
        $user_ids = Db::name('exam_grade')->where('paper_id', $paper_id)->group('user_id')->column('user_id');
        if ($user_ids) {
            // 截取数组
            $user_ids = $slice ? array_slice($user_ids, $slice) : $user_ids;
            return Db::name('user')->whereIn('id', $user_ids)->select();
        }

        return [];
    }


 

    /**
     * 检查试卷是否需要支付
     * status 0：不能参加，1：可以参加，2：需要支付
     * @param self $paper
     * @param int  $user_id
     * @param bool $from_submit
     * @param int  $room_id
     * @return array
     */
    public static function checkPay($paper, $user_id, $from_submit = false, $room_id = 0)
    {
        $result = [
            'type'         => PayAttachType::PAPER_PAY,
            'status'       => 1, // 0：不能参加，1：可以参加，2：需要支付
            'msg'          => '',
            'is_member'    => UserModel::isMember($user_id),
            'price'        => $paper['price'],
            'member_price' => $paper['member_price'],
        ];

        // 考场来的暂不收费
        if ($room_id) {
            return $result;
        }

        switch ($paper['uses']) {
            // 针对所有人
            case PaperUses::ALL:
                return $result;

            // 仅会员
            case PaperUses::ONLY_MEMBER:
                // 非会员
                if (!$result['is_member']) {
                    $result['status'] = 0;
                    $result['msg']    = '该试卷仅对会员用户开放';
                    return $result;
                }

                // 会员免费
                if (floatval($result['member_price']) == 0) {
                    return $result;
                }

                // 会员须付费但未付费
                if ($from_submit || !PaperOrderModel::hasUsableOrder($paper['id'], $user_id)) {
                    $result['status'] = 2;
                    $result['msg']    = '请付费后再参加';
                    return $result;
                }

            // 仅支付用户
            case PaperUses::ONLY_PAY:
                // 非会员
                if (!$result['is_member']) {
                    // 非会员免费
                    if (floatval($result['price']) == 0) {
                        return $result;
                    }

                    // 须付费但未付费
                    if ($from_submit || !PaperOrderModel::hasUsableOrder($paper['id'], $user_id)) {
                        $result['status'] = 2;
                        $result['msg']    = '请付费后再参加';
                        return $result;
                    }
                } else {
                    // 会员免费
                    if (floatval($result['member_price']) == 0) {
                        return $result;
                    }

                    // 会员须付费但未付费
                    if ($from_submit || !PaperOrderModel::hasUsableOrder($paper['id'], $user_id)) {
                        $result['status'] = 2;
                        $result['msg']    = '请付费后再参加';
                        return $result;
                    }
                }
        }

        return $result;
    }
}
